<?php

#우선은, 이미지 폭을 200px로 리사이즈 & 저장 코드
#$thumb = new Image('image.jpg');
#$thumb->width(200);
#$thumb->save();
#
#
#이미지를 50%의 사이즈로 리사이즈 코드
#$thumb = new Image('image.jpg');
#$thumb->resize(50);
#$thumb->save();
#
#좌 0px, 상 30px의 위치부터 32x32 이미지를 오래 낼때의 코드
#$thumb = new Image('title.jpg');
#$thumb->name('title2');
#$thumb->width(32);
#$thumb->height(32);
#$thumb->crop(0,30);
#$thumb->save();
#
#이제까지의 코드는, new Image()에 건넨 파일명으로 저장하지만, 다른 이름으로 지정해서 저장하는 코드
#$thumb = new Image('image.jpg');
#$thumb->name('image2');
#$thumb->width(200);
#$thumb->save();
#$thumb->img_ratio($path, $img, $maxwidth, $maxheight);

	class Image {

		var $file;
		var $image_width;
		var $image_height;
		var $width;
		var $height;
		var $ext;
		var $types = array('','gif','jpeg','png','swf');
		var $quality = 80;
		var $top = 0;
		var $left = 0;
		var $crop = false;
		var $type;

		function Image($name='') {
			$this->file = $name;
			$info = getimagesize($name);
			$this->image_width = $info[0];
			$this->image_height = $info[1];
			$this->type = $this->types[$info[2]];
			$info = pathinfo($name);
			$this->dir = $info['dirname'];
			$this->name = str_replace('.'.$info['extension'], '', $info['basename']);
			$this->ext = $info['extension'];
		}

		function dir($dir='') {
			if(!$dir) return $this->dir;
			$this->dir = $dir;
		}

		function name($name='') {
			if(!$name) return $this->name;
			$this->name = $name;
		}

		function width($width='') {
			$this->width = $width;
		}

		function height($height='') {
			$this->height = $height;
		}

		function resize($percentage=50) {
			if($this->crop) {
				$this->crop = false;
				$this->width = round($this->width*($percentage/100));
				$this->height = round($this->height*($percentage/100));
				$this->image_width = round($this->width/($percentage/100));
				$this->image_height = round($this->height/($percentage/100));
			} else {
				$this->width = round($this->image_width*($percentage/100));
				$this->height = round($this->image_height*($percentage/100));
			}

		}

		function crop($top=0, $left=0) {
			$this->crop = true;
			$this->top = $top;
			$this->left = $left;
		}

		function quality($quality=80) {
			$this->quality = $quality;
		}

		function show() {
			$this->save(true);
		}

		function save($show=false) {

			if($show) @header('Content-Type: image/'.$this->type);

			if(!$this->width && !$this->height) {
				$this->width = $this->image_width;
				$this->height = $this->image_height;
			} elseif (is_numeric($this->width) && empty($this->height)) {
				$this->height = round($this->width/($this->image_width/$this->image_height));
			} elseif (is_numeric($this->height) && empty($this->width)) {
				$this->width = round($this->height/($this->image_height/$this->image_width));
			} else {
				if($this->width<=$this->height) {
					$height = round($this->width/($this->image_width/$this->image_height));
					if($height!=$this->height) {
						$percentage = ($this->image_height*100)/$height;
						$this->image_height = round($this->height*($percentage/100));
					}
				} else {
					$width = round($this->height/($this->image_height/$this->image_width));
					if($width!=$this->width) {
						$percentage = ($this->image_width*100)/$width;
						$this->image_width = round($this->width*($percentage/100));
					}
				}
			}

			if($this->crop) {
				$this->image_width = $this->width;
				$this->image_height = $this->height;
			}

			if($this->type=='jpeg') $image = imagecreatefromjpeg($this->file);
			if($this->type=='png') $image = imagecreatefrompng($this->file);
			if($this->type=='gif') $image = imagecreatefromgif($this->file);

			$new_image = imagecreatetruecolor($this->width, $this->height);
			imagecopyresampled($new_image, $image, 0, 0, $this->top, $this->left, $this->width, $this->height, $this->image_width, $this->image_height);

			$name = $show ? null: $this->dir.DIRECTORY_SEPARATOR.$this->name.'.'.$this->ext;
			if($this->type=='jpeg') imagejpeg($new_image, $name, $this->quality);
			if($this->type=='png') imagepng($new_image, $name);
			if($this->type=='gif') imagegif($new_image, $name);

			imagedestroy($image);
			imagedestroy($new_image);
		}

		function img_ratio($path, $img, $maxwidth, $maxheight) {
			if($img) {
				// $img는 이미지의 경로(예:./images/phplove.gif)
				$imgsize = getimagesize($path.$img);
				if($imgsize[0]>$maxwidth || $imgsize[1]>$maxheight) {
					// 가로길이가 가로limit값보다 크거나 세로길이가 세로limit보다 클경우
					$sumw = (100*$maxheight)/$imgsize[1];
					$sumh = (100*$maxwidth)/$imgsize[0];
					if($sumw < $sumh) {
					// 가로가 세로보다 클경우
					$img_width = ceil(($imgsize[0]*$sumw)/100);
					$img_height = $maxheight;
					} else {
					// 세로가 가로보다 클경우
					$img_height = ceil(($imgsize[1]*$sumh)/100);
					$img_width = $maxwidth;
					}
				} else {
					// limit보다 크지 않는 경우는 원본 사이즈 그대로.....
					$img_width = $imgsize[0];
					$img_height = $imgsize[1];
				}

				$imgsize[0] = $img_width;
				$imgsize[1] = $img_height;
			} else {
				$imgsize[0] = $maxwidth;
				$imgsize[1] = $maxheight;
			}
			return $imgsize;
		}

	}

?>